package com.cnap.multiclouldmgmt.repository.master;

import com.cnap.multiclouldmgmt.model.scale.db.ScalingGroupPO;
import com.cnap.multiclouldmgmt.model.scale.group.QueryScalingGroupParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <类文件描述>
 *
 * @author xc
 **/
@Mapper
public interface ScalingGroupMapper {

    /**
     * 建表
     */
    void createTableIfNotExist();

    /**
     * 插入伸缩组信息
     *
     * @param po 伸缩组信息
     * @return 结果
     */
    int insertScalingGroup(@Param("scalingGroup") ScalingGroupPO po);

    /**
     * 参数查询
     *
     * @param param 参数
     * @return 结果
     */
    List<ScalingGroupPO> selectByParam(@Param("queryParam") QueryScalingGroupParam param);

    /**
     * 参数查询
     *
     * @param param    参数
     * @param userName 用户名称
     * @return 结果
     */
    List<ScalingGroupPO> selectByParamWithUser(@Param("queryParam") QueryScalingGroupParam param,
                                               @Param("userName") String userName);

    /**
     * 根据id更新伸缩组状态
     *
     * @param groupId 伸缩组id
     * @param status  状态
     * @return 结果
     */
    int updateGroupStatusById(@Param("groupId") String groupId, @Param("status") int status);

    /**
     * 根据id删除伸缩组id
     *
     * @param groupId 伸缩组id
     * @return 结果
     */
    int deleteGroupById(@Param("groupId") String groupId);

    /**
     * 根据id查询
     *
     * @param groupId 伸缩组id
     * @return 结果
     */
    ScalingGroupPO selectGroupById(@Param("groupId") String groupId);

    /**
     * 根据标签查询
     *
     * @param label       标签
     * @param userName    用户名
     * @param clusterName 集群名称
     * @return 结果
     */
    int countByLabelWithUserAndClusterName(@Param("label") String label, @Param("userName") String userName, @Param(
            "clusterName") String clusterName);

    /**
     * 根据配置id查询
     *
     * @param configId 配置id
     * @return 结果
     */
    List<ScalingGroupPO> selectByConfigId(@Param("configId") String configId);

    /**
     * @param type
     * @param num
     * @param groupId
     */
    void updateExpectNum(@Param("type") String type, @Param("num") int num, @Param("groupId") String groupId);

    /**
     * 根据集群名称查询
     *
     * @param clusterName 集群民粹
     * @return 结果
     */
    List<ScalingGroupPO> selectGroupByClusterName(@Param("clusterName") String clusterName);

    /**
     * 根据集群名称和标签查询
     *
     * @param clusterName 集群名称
     * @param label       标签
     * @return 结果
     */
    List<ScalingGroupPO> selectGroupByClusterNameAndLabel(@Param("clusterName") String clusterName,
                                                    @Param("label") String label);
}
